package com.doctcloud.hisinfo.histable.enums;

import lombok.Getter;

/**
 * 门诊住院科室标志枚举类
 * 映射科室在门诊/住院等场景下的标志编码与名称
 */
@Getter
public enum DeptClinicInpatientFlagEnum {

    /**
     * 门诊科室
     */
    OUTPATIENT("0", "门诊"),

    /**
     * 住院科室
     */
    INPATIENT("1", "住院"),

    /**
     * 急观科室（急诊观察室）
     */
    EMERGENCY_OBSERVATION("2", "急观"),

    /**
     * 互联网科室
     */
    INTERNET("3", "互联网"),

    /**
     * 体检科室
     */
    PHYSICAL_EXAM("8", "体检"),

    /**
     * 其他类型科室
     */
    OTHER("9", "其他");

    /**
     * 标志编码（对应数据库字段值）
     */
    private final String code;

    /**
     * 标志名称（用于前端展示或业务说明）
     */
    private final String name;

    /**
     * 构造方法
     * @param code 标志编码
     * @param name 标志名称
     */
    DeptClinicInpatientFlagEnum(String code, String name) {
        this.code = code;
        this.name = name;
    }

    /**
     * 根据编码获取对应的枚举实例
     * @param code 标志编码（如"0"、"1"、"8"等）
     * @return 对应的枚举实例，若未匹配则返回OTHER
     */
    public static DeptClinicInpatientFlagEnum getByCode(String code) {
        for (DeptClinicInpatientFlagEnum flag : values()) {
            if (flag.code.equals(code)) {
                return flag;
            }
        }
        // 未匹配时默认返回"其他"，兼容异常编码
        return OTHER;
    }

    /**
     * 根据编码获取标志名称
     * @param code 标志编码
     * @return 标志名称，默认返回"其他"
     */
    public static String getNameByCode(String code) {
        return getByCode(code).getName();
    }
}
